<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/12/26
 * Time: 10:32
 */

namespace app\api\controller;
use think\Controller;
use think\Db;
import('wxpay.WxPay_Api', EXTEND_PATH);
import('wxpay.WxPay_Notify', EXTEND_PATH);
import('wxpay.WxPay_Sign', EXTEND_PATH);
/**
 * @name【乘客端接口】
 * @baseurl【Passenger】
 */
class Passenger extends Base
{
    public function aa(){
        //充值订单查询
        $order_where['recharge_no'] = 151779776458791138;

        $now_date = date('Y-m-d',time());
        $recharge_where['begin_date'] = array('elt',$now_date);
        $recharge_where['end_date'] = array('egt',$now_date);

        $recharge_where['area_id'] = Db::name('order')->where($order_where)->value('area_id');


        $recharge_info = Db::name('recharge_record')->alias('rrd')
            //关联充值优惠
            ->join('activity at','rrd.area_id = at.area_id','left')
            ->field('rrd.passenger_id,rrd.recharge_record_id,rrd.recharge_no,rrd.is_success,at.recharge_price,at.give_price')
            ->where($recharge_where)->find();

        var_dump($recharge_info);
    }

    /**
      * @name【登录】
      * @desc【登录】
      * @uri【login】
      * @method【post】
      * @param【
      * user $ string $ abc $ 帐号#
      * password $ string $ abc $ 密码#
      * token $ string $ abc $ 首次登录后返回（直接登录）
      * 】
      * @return【
      * code $ int $ number|1-1 $ 标识1-成功 0-失败#
      * msg $ string $  $ code=0，错误信息#
      * data $ string $ $ 列表$[]
      * 】
      */

    //登录  --返回乘客基本信息-侧栏信息
    public function login()
    {
        $p = input('param.');
        if (request()->isPost()) {
            $where['username'] = $p['username'];
            $phone             = $p['username'];
            $where['state'] = '1';  //1-启用
            $user = Db::name('user')->where($where)->find();
            if ($p['token']) {
                $p['token'] = $user['password'];
                return $this->msg_rtn(1);
            } else {
                if (!$user) {
                    return $this->msg_rtn(0, '无此乘客信息/已禁用！');
                } else {
                    if (CorePwd($p['password'], $user['salt']) == $user['password']) {
                        $pr_where['user_id'] = $user['user_id'];
                        $info                = $this->rtn_user_info($user, $pr_where);
                        $info['activetime']  = time();
                        $info['logintime']   = time();
                        $info['token']       = $this->CorePwd($p['password'], $user['salt']);
                        $ptoken              = (new \app\api\logic\Login())->createPassengerToken($phone,$this->redis,$this->redisPreFix);
                        $info['ptoken']      = $ptoken;
                        $this->setRedis($ptoken,$info);
                        return $this->rtn_data(1, $info);
                    } else {
                        return $this->msg_rtn(0, '密码错误！');
                    }
                }
            }
        } else {
            return $this->msg_rtn(0, '提交方式错误！');
        }
    }

    //返回登录的信息
    public function rtn_user_info($user,$pr_where){
        $info = Db::name('passenger')->where($pr_where)->field('passenger_id,head_portrait AS passenger_head_portrait,name AS passenger_name,phone AS passenger_phone,unit AS passenger_unit')->find();
        $info['user_id'] = $user['user_id'];
        $info['is_set_pwd'] = $user['is_set_pwd'];
        $info['role_id'] = $user['role_id'];
        $passenger_head_portrait = $info['passenger_head_portrait'];
        $arr = explode('/',$passenger_head_portrait);
        $img_name = $arr[count($arr)-1];
        $img_file = $arr[count($arr)-2];
        $info['passenger_head_portrait'] = "new.jjcxfw.com/upload/head_portrait/". $img_file ."/".$img_name;
        return $info;
    }


    /*//首页 -- 新订单
    public function home_page_order(){
        $where['or.passenger_id'] = input('param.passenger_id');
        $info = Db::name('order')->alias('or')
            //关联车型表
            ->join('car_type ct','or.car_type_id = ct.car_type_id')
            ->join('passenger pr','or.approval = pr.name','left')
            ->order('or.order_time desc')
            ->where($where)
            ->whereNull('or.delete_time')
            ->field('or.order_type,or.order_no,or.order_time,or.passenger_name,or.passenger_phone,or.order_state,or.departure,or.destination,
            or.booking_type,or.departure_coord,or.destination_coord,or.is_return,or.appointment_time,or.approval AS approval_name,pr.phone AS approval_phone,ct.chartered_hour')
            ->limit(5)
            ->select();

        //订单状态，1：待审批，2：已批准，3：已拒绝，4：待用车，5：已派车，6：接驾中，
        //7：已到达出发地，8：已到达目的地，9：待支付，10：待评价，11：已完成，12：已取消，13：已终止，14：无效
        if($info){

            return $this->rtn_data(1,$info);
        }else{
            return $this->msg_rtn(0,'无订单信息！');
        }
    }*/

    /**
     * @name【首页审核订单数量】
     * @desc【首页审核订单数量】
     * @uri【approval_order_number】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户passenger_id $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //首页审核订单数量
    public function approval_order_number(){
        $p = input('param.');
        $where['passenger_id'] = $p['passenger_id'];
        $where['order_state'] = 1;
        $info['count'] = Db::name('order')->where($where)->count();
        return $this->rtn_data($code=1,$info);
    }


    /**
     * @name【选择乘车人】
     * @desc【选择乘车人】
     * @uri【change_department_passenger】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户passenger_id $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //选择乘车人
    public function change_department_passenger(){
        $p = input('param.');

        $car_passenger_info = Db::name('passenger')->alias('pr')
            ->join('car_use cu','pr.car_use_id = cu.car_use_id')
            ->field('pr.car_use_id,cu.name')
            ->where('pr.passenger_id',$p['passenger_id'])->find();

        $department_info = Db::name('department')->where('car_use_id',$car_passenger_info['car_use_id'])->field('department_id,name')->select();

        foreach ($department_info as $k => $val){
            $department_where['department_id'] = $val['department_id'];
            $passenger_info = Db::name('passenger')->where($department_where)->whereNull('delete_time')->field('name AS passenger_name,phone AS passenger_phone')->select();
            $department_info[$k]['passenger_info'] = $passenger_info;
        }

        $info = array(
            'car_use_name' => $car_passenger_info['name'],
            'department_info' => $department_info
        );

        return $this->rtn_data(1,$info);

    }

    /**
     * @name【公务-用车类型】
     * @desc【公务-用车类型】
     * @uri【use_car_type】
     * @param【
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //用车类型 1：行政执法，2：特殊公务，3：重要会议，4：机要通讯，5：视察调研，6：公务接待
    public function use_car_type(){
        $info = config('base.use_types');
        if($info){
            return $this->rtn_data(1,$info);
        }else{
            return $this->msg_rtn(0,'暂无用车类型！');
        }
    }

    /**
     * @name【包车计费信息】
     * @desc【包车计费信息】
     * @uri【car_type】
     * @method【post】
     * @param【
     * type $ string $ 1 $ 类型。4：约组车，2：公务车，5：私包车，3：公包车 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //选择包车的车型后  返回包车的计费信息
    //车辆类型，2：优选型，3：舒适型，4：豪华型，5：小巴，6：中巴，7：大巴，8：执法车
    //类型。4：约组车，2：公务车，5：私包车，3：公包车
    public function car_type(){
        $p = input('param.');
        $where['state'] = '1';
        $where['type'] = $p['type'];

        $cartypes = Db::name('car_type')->where($where)->field('car_type,seats,car_type_id,chartered_charge,chartered_km,chartered_hour')->select();
        $info = [];
        foreach ($cartypes as $k => $val){
            //$info[$k]['car_type_id'] = Db::name('car_type')->where($where)->value('car_type_id');
            //$info[$val['car_type']][] = $val;
            if( empty($info[$val['seats']]) ) {

                $info[$val['seats']] = [
                    'car_type_id' => $val['car_type_id'],
                    'seats'		  => $val['seats'],
                    'car_type_info' => [$val]
                ];
            } else {
                $info[$val['seats']]['car_type_info'][] = $val;
            }

        }
       /* $info = Db::name('car_type')->where($where)->distinct('car_type')->field('car_type')->select();
        foreach ($info as $k => $val){
            $where['car_type'] = $val['car_type'];
            $info[$k]['car_type_id'] = Db::name('car_type')->where($where)->value('car_type_id');
            $info[$k]['seats'] = Db::name('car_type')->where($where)->distinct('seats')->field('seats')->select();
            foreach ($info[$k]['seats'] as $key =>$vala){
                $where['seats'] = $vala['seats'];
                $info[$k]['seats'][$key]['car_info'] = Db::name('car_type')->where($where)->field('car_type_id AS car_typee_id,chartered_charge,chartered_km,chartered_hour')->select();
            }
        }*/
       // var_dump($info);
        if($info){
            return $this->rtn_data(1,$info);
        }else{
            return $this->msg_rtn(0,'暂无车辆类型！');
        }
    }

    /**
     * @name【个人计费信息】
     * @desc【个人计费信息】
     * @uri【car_type】
     * @method【post】
     * @param【
     * type $ string $ 1 $ 类型。4：约组车，2：公务车，5：私包车，3：公包车 $ 1#
     * car_type $ string $ 1 $ 车辆类型，2：优选型，3：舒适型，4：豪华型，5：小巴，6：中巴，7：大巴，8：执法车 $ 1#
     * estimate_mileage $ string $ 1 $ 公里数 $ 1#
     * order_type $ string $ 1 $ 订单类型 $ 1#
     * is_return $ string $ 1 $ order_type=1,是否往返
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //公共 个人用车费用计算
    public function use_car_daily(){

        $p = input('post.');

        if(request()->isPost()){

            //类型。4：约组车，2：公务车，5：私包车，3：公包车
            $car_type_where['type'] = $p['type'];
            //车辆类型，2：优选型，3：舒适型，4：豪华型，5：小巴，6：中巴，7：大巴，8：执法车
            $car_type_where['car_type'] = $p['car_type'];
            $car_type_where['state'] = '1';   //启用   2-禁用
            $car_info = Db::name('car_type')->where($car_type_where)->find();

            if($car_info){

                //调用计算
                $cost_info = $this->car_daily($p,$car_info);
                if($cost_info){

                    return $this->rtn_data(1,$cost_info);

                }else{
                    return $this->msg_rtn(0,'计算车费出错！');
                }

            }else{

                return $this->msg_rtn(0,'无该车辆类型/已停用！');
            }

        }else{
            return $this->msg_rtn(0,'提交方式错误！');
        }
    }


    // 里程算出车费
    public function car_daily($p,$car_info){

        //类型。4：约组车，2：公务车，5：私包车，3：公包车
        if($p['type'] == 2 || $p['type'] == 4){

            //总费用 = 额外+基础
            $all_cost = $this->milesFee($car_info,$p['estimate_mileage']);

            //订单类型,1：公务订单，2：企业订单，3：个人订单
            //   是否需要返程  1：需要  9：无需
            if($p['order_type'] == '1'){

                if($p['is_return'] == '1'){
                    $all_cost = $all_cost + $all_cost * config('passenger.car_cost')['order_back_discount'];
                }
            }

            $cost_info['starting_price'] = $car_info['p_starting_price'];  //起步价
            $cost_info['estimate_cost'] = $all_cost;  //预计费用

        }

        return $cost_info;
    }

    /**
     * @name【单位内审批员】
     * @desc【单位内审批员】
     * @uri【change_part_approval】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户乘客passenger_id $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //申请用车--单位内审批员列表
    public function change_part_approval(){
        $p = input('post.');

        $where['u.role_id'] = '3';
        $where['u.state'] = '1';

        $car_use_id = Db::name('passenger')->where('passenger_id',$p['passenger_id'])->value('car_use_id');

        $where['pr.car_use_id'] = $car_use_id;

        $list = Db::name('user')->alias('u')
            ->join('passenger pr','u.user_id = pr.user_id')
            ->field('pr.name AS approval_name,pr.phone AS approval_phone')
            ->where($where)->whereNull('pr.delete_time')
            ->select();
        if($list){
            return $this->rtn_data(1,$list);
        }else{
            return $this->msg_rtn(0,'暂无审批员！');
        }
    }

    /**
     * @name【提交订单申请】
     * @desc【提交订单申请】
     * @uri【order_apply】
     * @method【post】
     * @param【
     * type $ string $ 1 $ 类型。4：约组车，2：公务车，5：私包车，3：公包车 $ 1#
     * car_type_id $ string $ 1 $ 车辆类型，2：优选型，3：舒适型，4：豪华型，5：小巴，6：中巴，7：大巴，8：执法车 $ 1#
     * order_type $ string $ 1 $ 订单类型 订单类型,1：公务订单，2：企业订单，3：个人订单 $ 1#
     * passenger_id $ int $ 1 $ 下单人ID $ 1#
     * passenger_name $ string $ 小猪啊 $ 乘客姓名 $ 1#
     * passenger_phone $ string $ 17689 $ 乘客电话 $ 1#
     * orderer $ string $ 小猪 $ 下单人姓名 $ 1#
     * from_addr $ string $ 石狮 $ 出发地 $ 1#
     * from_lat $ string $ 12.33 $ 出发地纬度 $ 1#
     * from_lon $ string $ 12.33 $ 出发地经度 $ 1#
     * estimate_mileage $ string $ 12.6 $ 公里数 $ 1#
     * booking_type $ string $ 1 $ 订车类型：1，订车（日常）。2，包车。3，分时租赁 $ 1#
     * appointment_time $ string $ 2017-07-17 12：05：05 $ 预约时间#
     * pay_type $ string $ 1 $ 2-单位支付 3-财政支付,order_type=1#
     * approval_name $ string $ 1 $ 审批人 order_type=1#
     * use_explain $ string $ 1 $ 用车说明 order_type=1#
     * pay_type $ string $ 1 $ 支付方式 order_type=1#
     * use_type $ string $ 1 $ order_type=1 用车类型 1：行政执法，2：特殊公务，3：重要会议，4：机要通讯，5：视察调研，6：公务接待#
     * is_return $ string $ 1 $ booking_type=1，1-需要返程  9-无需#
     * to_addr $ string $ 晋江 $ booking_type=1，目的地#
     * to_lat $ string $ 12.12 $ booking_type=1，目的地纬度#
     * to_lon $ string $ 12.12 $ booking_type=1，目的地经度#
     * pre_meter $ string $ 12.12 $ 预计xx米 $ 1#
     * pre_time $ string $ 12.12 $ 预计时间 $ 1#
     * pre_fee $ string $ 12.12 $ 预计费用 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //提交订单申请
    public function order_apply(){
        $p = input('post.');

        if(request()->isPost()){
            $data = $this->person_ordata();

            if($data){

                //1-  日常用车
                if($p['booking_type'] == '1'){

                    $info['from_lat'] = $data['from_lat'];
                    $info['from_lon'] = $data['from_lon'];
                    $info['to_lat'] = $data['to_lat'];
                    $info['to_lon'] = $data['to_lon'];
                }
                $info['order_no'] = $data['order_no'];
                return $this->rtn_data(1,$info);
            }else{

                return $this->msg_rtn(0,'系统异常，下单失败！');
            }
        }
    }

    //获取订单参数
    public function person_ordata(){
        $p = input('post.');

        $ar_where['state'] = '1';

        //类型。4：约组车，2：公务车，5：私包车，3：公包车
        $where['type'] = $p['type'];
        //车辆类型，2：优选型，3：舒适型，4：豪华型，5：小巴，6：中巴，7：大巴，8：执法车
        $where['car_type_id'] = $p['car_type_id'];
        $where['state'] = '1';
        $car_type_info = Db::name('car_type')->where($where)->find();

        if($car_type_info){

            //订单状态，1：待审批，2：已批准，3：已拒绝，4：待用车，5：已派车，6：接驾中，
            //订单类型 订单类型,1：公务订单，2：企业订单，3：个人订单
            $order_type = $p['order_type'];

            $sj = $this->sj_rand();
            $order_no = strtotime(date('Y-m-d H:i:s',time()))."$sj";    //订单号

            $data = [
                    'passenger_id' => $p['passenger_id'],   //下单人ID
                    'car_type_id' => $p['car_type_id'],
                    'order_no' => $order_no,
                    'passenger_name' => $p['passenger_name'],
                    'passenger_phone' => $p['passenger_phone'],
                    'order_type' => $order_type,
                    'order_time' => date('Y-m-d H:i:s',time()), //下单时间
                    'orderer' => $p['orderer'],    //下单人
                    'booking_type'=> $p['booking_type'], //订车类型：1，订车（日常）。2，包车。3，分时租赁
                ];

            $gps_data = [

                'from_addr' => $p['from_addr'],       //出发地
                'from_lat' => $p['from_lat'],         //出发地纬度
                'from_lon' => $p['from_lon'],         //出发地经度
                'call_time' => date('Y-m-d H:i:s',time()),         //叫车时间
                'plan_time' => $p['appointment_time'] ? $p['appointment_time'] : date('Y-m-d H:i:s',time()),//计划用车时间
            ];

            $fee_data = [

                'pre_meter' => $p['pre_meter'],       //预计xx米
                'pre_time' => $p['pre_time'],         //预计时间
                'pre_fee' => $p['pre_fee'],           //预计费用
            ];

                //是否是有预约时间字段
               if($p['appointment_time']){
                    $data['appointment_time'] = $p['appointment_time'];
                }

                //订单类型,1：公务订单，2：企业订单，3：个人订单
                //   是否需要返程  1：需要  9：无需
            if($order_type == 1){

                $data['pay_type'] = $p['pay_type'];         //支付类型
                $data['order_state'] = '1';                 //订单状态
                $data['apply_time'] = date('Y-m-d H:i:s',time());       //申请时间
                $data['approval'] = $p['approval_name'];    //审批人
                $data['use_explain'] = $p['use_explain'];  //用车说明
                $data['use_type'] = $p['use_type'];        //用车类型 1：行政执法，2：特殊公务，3：重要会议，4：机要通讯，5：视察调研，6：公务接待

                    //公务 日常=1  包车=2
                    if($p['booking_type'] == '1'){

                        $data['is_return'] = $p['is_return'];     //1-需要返程  9-无需
                        $gps_data['to_lat'] = $p['to_lat'];       //目的地纬度
                        $gps_data['to_lon'] = $p['to_lon'];       //目的地经度
                        $gps_data['to_addr'] = $p['to_addr'];     //目的地
                     }
                }elseif($order_type == 3){

                    //个人 日常=1  包车=2
                    $data['order_state'] = '4';             //订单状态
                    if($p['booking_type'] == '1'){

                        $gps_data['to_lat'] = $p['to_lat'];       //目的地纬度
                        $gps_data['to_lon'] = $p['to_lon'];       //目的地经度
                        $gps_data['to_addr'] = $p['to_addr'];     //目的地
                    }
                }

                // 启动事务
                Db::startTrans();
                try{
                    Db::name('order')->insert($data);
                    $order_id = Db::name('order')->where('order_no',$order_no)->value('order_id');
                    $gps_data['order_id'] = $order_id;
                    $fee_data['order_id'] = $order_id;
                    Db::name('order_gps')->insert($gps_data);
                    Db::name('order_fee')->insert($fee_data);
                    // 提交事务
                    Db::commit();
                    $gps_data['order_no'] = $order_no;
                    return $gps_data;
                } catch (\Exception $e) {
                    // 回滚事务
                    Db::rollback();
                }

            }else{

                return $this->msg_rtn(0,'该车型暂未开放！');
            }
    }

    /**
     * @name【待审批、审批历史】
     * @desc【待审批、审批历史】
     * @uri【approval_auth_person】
     * @method【post】
     * @param【
     * approval_name $ string $ 小猪猪 $ 审批人姓名 $ 1#
     * order_type $ string $ 1 $ 订单类型,1：公务订单，2：企业订单，3：个人订单 $ 1#
     * order_state $ string $ 1 $ 订单状态，1：待审批，2：已批准，3：被驳回， $ 1#
     * role_id $ string $ 1 $ 乘客角色ID $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */

    //拥有审批权限的乘客---待审批、审批历史
    public function approval_auth_person(){
        $p = input('param.');
        $where['or.approval'] = $p['approval_name'];
        //订单类型,1：公务订单，2：企业订单，3：个人订单
        $where['or.order_type'] = $p['order_type'];
        //订单状态，1：待审批，2：已批准，3：被驳回，
        $where['or.order_state'] = $p['order_state'];

        $role_id = $p['role_id'];
        if($role_id == '3'){

            $info = Db::name('order')->alias('or')
                ->join('passenger pr','or.passenger_id = pr.passenger_id')
                ->join('car_type ct','or.car_type_id = ct.car_type_id')
                //USED
                ->join('car_use cu','pr.car_use_id = cu.car_use_id')
                //GPS
                ->join('order_gps ogs','or.order_id = ogs.order_id')
                //fee
                ->join('order_fee ofe','or.order_id = ofe.order_id')
                ->field('pr.name AS passenger_name,pr.phone AS passenger_phone,or.car_type_id,or.order_no,or.order_time,or.order_type,
                or.is_return,or.use_type,or.use_explain,or.booking_type,or.appointment_time,or.pay_type,ogs.from_addr,ogs.to_addr,ofe.pre_meter,ofe.pre_fee,
                ct.car_type,ct.chartered_hour,ct.chartered_charge,cu.quota,cu.unit_quota,cu.used_quota')
                ->where($where)
                ->order('apply_time desc')
                ->select();

            foreach ($info as $k =>$val){
                $info[$k]['user_type'] = config('base.use_types')[$val['use_type']];
            }

            /*foreach ($info as $k=>$val){

                $car_type_where['car_type_id'] = $val['car_type_id'];
                $car_type_info = Db::name('car_type')->where($car_type_where)->find();

                if($car_type_info){

                    $p['type'] = $car_type_info['type'];
                    $p['estimate_mileage'] = $val['estimate_mileage'];
                    $p['order_type'] = $val['order_type'];
                    $p['is_return'] = $val['is_return'];

                    if($val['booking_type'] == 1){
                        //调用计算
                        //总费用 = 额外+基础
                        $cost_info = $this->car_daily($p,$car_type_info);
                        if($cost_info){

                            $info[$k]['estimate_cost'] = $cost_info['estimate_cost'];  //预估费用

                        }else{
                            return $this->msg_rtn(0,'计算车费出错！');
                        }
                    }

                }else{

                    return $this->msg_rtn(0,'无该类型信息！');
                }
            }*/

            if($info){
                return $this->rtn_data(1,$info);
            }else{
                return $this->msg_rtn(0,'暂无审批订单！');
            }

        }else{

            $this->msg_rtn($code=0,$msg='权限不足！');
        }
    }

    /**
     * @name【进行审批操作】
     * @desc【进行审批操作】
     * @uri【approval_opration】
     * @method【post】
     * @param【
     * order_no $ string $ 151598 $ 订单号 $ 1#
     * order_state $ string $ 2 $ 订单状态2-批准 3-驳回 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //进行审批操作
    public function approval_opration(){
        $p = input('post.');
        $where['order_no'] = $p['order_no'];

        //2-批准 3-驳回
        if($p['order_state'] == '2'){
            $data['order_state'] = '2';

        }elseif ($p['order_state'] == '3'){

            $data['order_state'] = '3';
        }

        $data['approval_time'] = date('Y-m-d H:i:s',time());
        $resl = Db::name('order')->where($where)->update($data);

        if($resl){
            return $this->msg_rtn(1);
        }else{
            return $this->msg_rtn(0,'审批失败！');
        }
    }

    /**
     * @name【撤回审批操作】
     * @desc【撤回审批操作】
     * @uri【rtn_approval_opration】
     * @method【post】
     * @param【
     * order_no $ string $ 151598 $ 订单号 $ 1#
     * user_id $ int $ 1 $ 用户user_id $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    public function rtn_approval_opration(){
        $p = input('param.');
        $us_where['user_id'] = $p['user_id'];
        $role_id = Db::name('user')->where($us_where)->value('role_id');
        if($role_id == 3){
            $where['order_no'] = $p['order_no'];

            $res = Db::name('order')->where($where)->setField('order_state',1);
            if($res){
                return $this->msg_rtn(1);
            }else{
                return $this->msg_rtn(0,'撤回返审失败！');
            }
        }else{
            return $this->msg_rtn(0,'您没有撤回权限！');
        }

    }

    /**
     * @name【等待派车】
     * @desc【等待派车】
     * @uri【wait_send_car】
     * @method【post】
     * @param【
     * order_no $ string $ 15198 $ 订单号 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //修改订单状态为等待派车
    public function wait_send_car(){
        $p = input('post.');
        $resl = Db::name('order')->where('order_no',$p['order_no'])->setField('order_state','4');
        if($resl){
            return $this->msg_rtn(1);
        }else{
            return $this->msg_rtn(0,'系统异常，派车失败！');
        }
    }


    //乘客点击用车
    public function passenger_use_car(){
        $p = input('post.');
        $where['order_no'] = $p['order_no'];

        //2-已批准
        $where['order_state'] = '2';
        //出发地经纬度
        $departure_coord = Db::name('order')->where($where)->value('departure_coord');
        $coord_info = explode(',',$departure_coord);

        $start_lat = $coord_info[0];
        $start_lng = $coord_info[1];
        $square = $this->returnSquarePoint($start_lat,$start_lng);

        //车辆 longitude 经度  latitude 纬度
        $car_where['latitude'] = array('between',[$square['right-bottom']['lat'],$square['left_top']['lat']]);
        $car_where['longitude'] = array('between',[$square['right-bottom']['lng'],$square['left_top']['lng']]);
        //1-执行 9-空闲
        $car_where['car_state'] = '9';
        //1-启用 9-禁用
        $car_where['state'] = '1';

        $info = Db::name('car')->where($car_where)->whereNull('delete_time')->field('car_id,latitude,longitude')->select();

        if($info){

            $short_car = $info[0];
            $short_distance = $this->GetDistance($start_lat, $start_lng, $short_car['latitude'], $short_car['longitude']);
            foreach ($info as $k => $val) {
                $distance = $this->GetDistance($start_lat, $start_lng, $val['latitude'], $val['longitude']);

                if ($distance < $short_distance){
                    $short_key = $info[$k];
                    $short_distance = $distance;
                }
            }

            $car_id = $info[$short_key]['car_id'];
            $data['car_id'] = $car_id;
            $data['order_state'] = '5';  //已派车
            $resl = Db::name('order')->where('order_no',$p['order_no'])->update($data);

            if($resl){
                /*$driver_info = Db::name('driver_car')->alias('dcr')
                    ->join('driver dr','dcr.driver_id = dr.driver_id')
                    ->field('dr.name AS driver_name,dr.phone AS driver_phone,dr.head_img AS driver_head_img')
                    ->where('car_id',$car_id)
                    ->whereNull('delete_time')
                    ->find();*/

                return $this->msg_rtn(1);
            }else{
                return $this->msg_rtn(0,'系统异常，用车失败！');
            }

        }else{
            return $this->msg_rtn(0,'附近暂无可用车辆！');
        }
    }

    //获取以原点为圆心 -- 3公里为半径 划一个圆
    public function returnSquarePoint($lng, $lat,$distance = 3)
    {
        $earthRadius = 6378138;
        $dlng =  2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat)));
        $dlng = rad2deg($dlng);
        $dlat = $distance/$earthRadius;
        $dlat = rad2deg($dlat);
        return $square = array(
            'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
            'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
            'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
            'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
        );
    }

    //获取2点之间的距离
    function GetDistance($lat1, $lng1, $lat2, $lng2){
        $pi = 3.1415926535898;
        $radius = 6378.137;

        $radLat1 = $lat1 * ($pi / 180);
        $radLat2 = $lat2 * ($pi / 180);
        $a = $radLat1 - $radLat2;
        $b = ($lng1 * ($pi / 180)) - ($lng2 * ($pi / 180));
        $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));
        $s = $s * $radius;
        $s = round($s * 10000) / 10000;
        return $s;
    }

    //获取用车成功后订单信息
    public function get_use_car(){
        $p = input('post.');
        $info = Db::name('order')->alias('or')
            ->join('car_brand cd','or.car_id = cd.car_id')
            ->join('car cr','or.car_id = cr.car_id')
            ->join('driver_car dc','or.car_id = dc.car_id')
            ->join('driver dr','dc.driver_id = dr.driver_id')
            ->field('or.car_id,or.order_time,or.departure,or.destination,or.departure_coord,or.destination_coord,dr.head_img AS driver_head_img,dr.name AS driver_name,dr.phone AS driver_phone,
            cd.name AS car_brand_name,cr.number AS car_number,cr.colour')
            ->where('order_no',$p['order_no'])
            ->find();
        $car_where['car_id'] = $info['car_id'];
        $car_where['order_state'] = '11';
        $info['avg_star'] = Db::name('order')->where($car_where)->avg('start');
        $info['order_number'] = Db::name('order')->where($car_where)->count();

        if($info){
            return $this->rtn_data(1,$info);
        }else{
            return $this->msg_rtn(0,'系统异常！');
        }
    }

    /**
     * @name【到达后支付】
     * @desc【到达后支付】
     * @uri【order_pay】
     * @method【post】
     * @param【
     * order_no $ string $ 15198 $ 订单号 $ 1#
     * money $ decimal $ 15.12 $ 结算金额 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //到达后支付
    public function order_pay(){
        $p = input('post.');
        $where['order_no'] = $p['order_no'];
        $order_state = Db::name('order')->where($where)->value('order_state');
        if(request()->isPost()){

            if($order_state == '8'){

                $this->makeWeChatPay('订单支付','鹏程出行',$p['order_no'],$p['money']);

            }else{
                $this->msg_rtn(0,'该订单尚未完成！');
            }

        }else{
            $this->msg_rtn(0,'请求方式错误！');
        }
    }

    /**
     * @name【评价-评星】
     * @desc【评价-评星】
     * @uri【evaluation_star】
     * @method【post】
     * @param【
     * evaluation $ string $ 服务棒 $ 评价内容 $ 1#
     * star $ string $ 5 $ 评星 $ 1#
     * order_no $ string $ 15198 $ 订单号 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //支付后评价-评星
    public function evaluation_star(){
        $p = input('post.');
        $data['evaluate'] = $p['evaluation'];
        $data['star'] = $p['star'];
        $data['order_state'] = 11;

        $resl = Db::name('order')->where('order_no',$p['order_no'])->update($data);
        if($resl){
            return $this->msg_rtn($code=1);
        }else{
            return $this->msg_rtn($code=0,$msg='系统异常，评价出错！');
        }
    }

    /**
     * @name【绑定推送】
     * @desc【绑定推送】
     * @uri【addBind】
     * @method【post】
     * @param【
     *  passenger_id $ int $ 1 $ 乘客id $ 1 #
     * push_user_id $ string $ abcdasdfasdfaf $ 极光用户标识id $ 1 #
     * device_token $ string $ abac $ 设备唯一标识 $ 1#
     * pkg_name $ string $ xdg.1233 $ 包名$ 1#
     * device_brand $ string $ 小米 $ 设备品牌 $ 1#
     * device_model $ string $ 2S $ 设备型号 $ 1#
     * device_version $ string $ 8 $系统版本 $1 #
     * device_type $ int $ 1 $ 设备类型 1安卓 2苹果
     * 】
     * @return【
     * code $ int $ number|1-1 $ 校验码#
     * msg $ string $  $ 错误信息
     * 】
     */
    public function addBind(){
        $data['push_user_id']   = input('push_user_id');
        $data['device_token']   = input('device_token');
        $data['device_type']    = input('device_type');
        $data['pkg_name']       = input('pkg_name');
        $data['device_brand']   = input('device_brand');
        $data['device_model']   = input('device_model');
        $data['device_version'] = input('device_version');
        $pid                    = input('passenger_id',0);
        $passenger              = \app\api\model\Passenger::get($pid);
        $user_id                = $passenger->user_id ? $passenger->user_id :0;
        if($user_id==0){
            return $this->msg_rtn(0,'无乘客信息！');
        }
        $exist    = \app\api\model\PushBind::get(['user_id'=>$user_id]);
        $pushBind = new \app\api\model\PushBind();
        if(!empty($exist)){
            $pushBind->save($data,['user_id'=>$this->driverInfo['user_id']]);
            return $this->rtn_data(1,'ok');
        }else{
            $data['user_id']        = $user_id;
            if($pushBind->validate(true)->save($data)){
                return $this->rtn_data(1,'ok');
            }else{
                return $this->msg_rtn(0,$pushBind->getError());
            }
        }
    }
    /**
     * @name【我的订单信息-详情】
     * @desc【我的订单信息-详情】
     * @uri【for_order】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户乘客ID $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[{"order_id":23759,"order_no":"151814291911244656","order_time":"2018-02-09 10:21:59","order_state":6,"from_addr":"石泉路时代商务中心","to_addr":"石狮长途车站","is_return":null,"booking_type":"1","order_type":"3","use_type":null,"car_type":"3","chartered_hour":0,"approval_name":null,"appointment_time":"2018-02-09 10:21:00","approval_phone":null,"passenger_name":"小黄","passenger_phone":"15060816655","from_lon":"118.61319900","from_lat":"24.75058900","to_lon":"118.61728000","to_lat":"24.74433900","user_type":null}]
     * 】
     */
    public function for_order(){
        $p = input('param.');
        $where['or.passenger_id'] = $p['passenger_id'];
        $field = 'or.order_id,or.order_no,or.order_time,or.order_state,ogs.from_addr,ogs.to_addr,or.is_return,';
        $field.= 'or.booking_type,or.order_type,or.use_type,ct.car_type,ct.chartered_hour,or.approval AS approval_name';
        $field.= ',or.appointment_time,pr.phone AS approval_phone,or.passenger_name,or.passenger_phone,ogs.from_lon,';
        $field.= 'ogs.from_lat,ogs.to_lon,ogs.to_lat,ogs.go_time,dr.name,dr.phone,car.number';
        $field.= ',ifnull(dr.star,5) star,ifnull(dr.score,100) score,ifnull(dr.rate,100) rate';
        $field.= ',car.colour,car.brand_name,99 order_count,dr.head_img';
        $info = Db::name('order')->alias('or')
            //车辆类型
            ->join('car_type ct','or.car_type_id = ct.car_type_id','left')
            //GPS
            ->join('order_gps ogs','or.order_id = ogs.order_id','left')
            //获取审批人
            ->join('passenger pr','or.approval = pr.name','left')
            ->join('driver dr','or.driver_id = dr.driver_id','left')
            ->join('car','car.car_id = dr.car_id','left')
            ->order('order_time desc')
            ->where($where)->whereIn('or.order_state',[1,2,4,5,6,7,8,9,10])
            ->field($field)
            ->select();
        foreach ($info as $k =>$val){
            $info[$k]['user_type'] = config('base.use_types')[$val['use_type']];
        }
        //订单状态，1：待审批，2：已批准，3：已拒绝，4：待用车，5：已派车，6：接驾中，
        //7：已到达出发地，8：已到达目的地，9：待支付，10：待评价，11：已完成，12：已取消，13：已终止，14：无效
        if($info){
            return $this->rtn_data(1,$info);
        }else{
            return $this->msg_rtn(0,'无订单信息！');
        }
    }

    /**
     * @name【乘客取消订单】
     * @desc【乘客取消订单】
     * @uri【cancel_order】
     * @method【post】
     * @param【
     * order_no $ string $ 15198 $ 订单号 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //乘客取消订单
    public function cancel_order(){
        $p = input('post.');
        $where['order_no'] = $p['order_no'];
        $resl = Db::name('order')->where($where)->setField('order_state',12);

       /* $dtoken             = $p['passenger_id'];
        $user['activetime'] = time();
        $this->setRedis($dtoken,$user);*/

        if($resl){
            return $this->msg_rtn(1);
        }else{
            return $this->msg_rtn(0,'取消失败！');
        }
    }

    /**
     * @name【历史订单-公务\个人】
     * @desc【历史订单-公务\个人】
     * @uri【passenger_opration_order】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户乘客ID $ 1#
     * order_type $ string $ 1 $ 订单类型,1：公务订单，2：企业订单，3：个人订单 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //历史订单-- 公务 、 个人
    public function passenger_opration_order(){
        $p = input('post.');
        $where['or.passenger_id'] = $p['passenger_id'];
        //订单类型,1：公务订单，2：企业订单，3：个人订单
        $where['or.order_type'] = $p['order_type'];

        if($p['order_type'] == '1'){

            $info = Db::name('order')->alias('or')
                //关联车辆类型表
                ->join('car_type ct','or.car_type_id = ct.car_type_id','left')
                //GPS
                ->join('order_gps ogs','or.order_id = ogs.order_id','left')
                //乘车人
                ->join('passenger pr','or.approval = pr.name','left')
                ->where($where)->whereIn('or.order_state',[3,11,12,13,14])
                ->order('order_time desc')
                ->field('or.order_time,or.order_state,or.use_type,or.booking_type,or.approval AS approval_name,or.pay_type,
                ogs.from_addr,ogs.to_addr,pr.phone AS approval_phone,ct.car_type,ct.chartered_hour')
                ->select();
            foreach ($info as $k =>$val){
                $info[$k]['user_type'] = config('base.use_types')[$val['use_type']];
            }
        }elseif($p['order_type'] == '3'){

            $info = Db::name('order')->alias('or')
                //关联车辆类型表
                ->join('car_type ct','or.car_type_id = ct.car_type_id','left')
                //GPS
                ->join('order_gps ogs','or.order_id = ogs.order_id','left')
                ->where($where)->whereIn('or.order_state',[3,11,12,13,14])
                ->order('order_time desc')
                ->field('or.order_time,or.order_state,or.booking_type,ogs.from_addr,ogs.to_addr,ct.car_type,ct.chartered_hour')
                ->select();
        }

        if($info){

            return $this->rtn_data(1,$info);
        }else{

            return $this->msg_rtn(0,'暂无历史订单！');
        }
    }

    //乘客基本资料设置 -- 侧栏

    /**
     * @name【上传头像】
     * @desc【上传头像】
     * @uri【upload_head_img】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户乘客ID $ 1#
     * head_portrait $ string $ sdsad.xx $ 文件 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //上传头像
    public function upload_head_img(){

        $p = input('post.');
        // 获取表单上传文件 例如上传了001.jpg

        $base64_image = str_replace(' ', '+', $p['head_portrait']);
        //post的数据里面，加号会被替换为空格，需要重新替换回来，如果不是post的数据，则注释掉这一行
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result)){
            //匹配成功
            if($result[2] == 'jpeg'){
                $image_name = uniqid().'.jpg';
            }else{
                $image_name = uniqid().'.'.$result[2];
            }

            $image_file = ROOT_PATH . 'public/upload/head_portrait/'.$p['passenger_id']%5 .'/';
            if(!file_exists($image_file)){
                mkdir($image_file,0777);
            }
            //服务器文件存储路径
            $image_file = $image_file.$image_name;
            file_put_contents($image_file, base64_decode(str_replace($result[1], '', $base64_image)));
            if (file_exists($image_file)){
                $data['head_portrait'] = $image_file;
                $resl = Db::name('passenger')->where('passenger_id',$p['passenger_id'])->update($data);
                if($resl){
                    $info['head_portrait'] = "new.jjcxfw.com/upload/head_portrait/".$p['passenger_id']%5 ."/".$image_name;
                    return $this->rtn_data(1,$info);
                }else{
                    return $this->msg_rtn(0,'系统异常！上传失败!');
                }
            }else{
                return $this->msg_rtn(0,'图片上传失败！');
            }
        }else{
            return $this->msg_rtn(0,'文件错误！');
        }
    }

    //我的优惠卷 1-- 历史：2已使用，3已过期
    public function passenger_coupon(){
        $p = input('post.');

        $where['pc.passenger_id'] = $p['passenger_id'];
        $now_date = date('Y-m-d',time());

        if($p['type'] == 1){
            $where['pc.used'] = '9';  //1-使用  9-未使用
            $where['expiration_date'] = array('egt',$now_date);

        }elseif($p['type'] == 2){

            $where['pc.used'] = '1';  //1-使用  9-未使用

        }elseif($p['type'] == 3){

            $where['expiration_date'] = array('lt',$now_date);
        }

        $info = Db::name('passenger_coupon')->alias('pc')
            ->join('coupon cp','pc.coupon_id = cp.coupon_id')
            ->join('')
            ->field('')
            ->select();
    }

    /**
     * @name【我的钱包】
     * @desc【我的钱包】
     * @uri【passenger_wallet】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户乘客ID $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //我的钱包
    public function passenger_wallet(){
        $p = input('post.');

        $info = (array)Db::name('passenger')
            ->where('passenger_id',$p['passenger_id'])->field('balance,business_quota,unit__quota,card_number,wechat')
            ->find();

        return $this->rtn_data(1,$info);

    }

    //绑定银行卡
    public function bind_card(){

    }

    /**
     * @name【充值】
     * @desc【充值】
     * @uri【wallet_recharge】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户乘客ID $ 1#
     * user_id $ int $ 1 $ 用户ID $ 1#
     * money $ decimal $ 15.12 $ 充值金额 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //充值
    public function wallet_recharge(){
        $p = input('post.');

        $data['passenger_id'] = $p['passenger_id'];
        $data['area_id'] = Db::name('user')->where('user_id',$p['user_id'])->value('area_id');
        $data['recharge_time'] = date('Y-m-d H:i:s',time());
        $data['money'] = $p['money'];
        $data['is_success'] = 9;

        $sj = $this->sj_rand();
        $recharge_no = strtotime(date('Y-m-d H:i:s',time()))."$sj";    //订单号
        $data['recharge_no'] = $recharge_no;

        $resl = Db::name('recharge_record')->insert($data);
        if($resl){

            return $this->makeWeChatPay('充值','鹏程出行',$recharge_no,$p['money']);
        }else{

            return $this->msg_rtn(0,'系统异常，生成订单失败！');
        }
    }

    //统一下单
    private function makeWeChatPay($description, $title, $orderno, $money)
    {
        //②、统一下单
        $input = new \WxPayUnifiedOrder();
        $description =mb_substr($description,0,20,'utf-8');
        $title =mb_substr($title,0,10,'utf-8');
        $input->SetBody($description);
        $input->SetAttach("test");
        $input->SetOut_trade_no($orderno);
        $input->SetTotal_fee($money);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag($title);
        $input->SetNotify_url("http://new.jjcxfw.com/api/Wxrtn/wxnotify");
        $input->SetTrade_type("APP");
        $UnifiedOrderResult = \WxPayApi::unifiedOrder($input);

        //二次加签
        if(!array_key_exists("appid", $UnifiedOrderResult)
            || !array_key_exists("prepay_id", $UnifiedOrderResult)
            || $UnifiedOrderResult['prepay_id'] == "")
        {
            //var_dump($UnifiedOrderResult);
            return $this->msg_rtn(0,'微信统一下单失败！');
        }else{

            $params = array(
                'appid' => $UnifiedOrderResult['appid'],
                'partnerid' => $UnifiedOrderResult['mch_id'],
                'prepayid' => $UnifiedOrderResult['prepay_id'],
                'package' => 'Sign=WXPay',
                'noncestr' => \WxPayApi::getNonceStr(),
                'timestamp' => time(),
            );

            // 拼装数据进行签名
            $getsin = new \WxPaySign();
            $params['sign'] = $getsin->SetSign($params);   // 获取签名

            if($params['sign']){
                //var_dump($params);
                return $this->rtn_data(1,$params);

            }else{
                return $this->msg_rtn(0,'缺少sign值！');
            }
        }
    }

    //提现
    public function wallet_withdraw(){
        $p = input('post.');
    }

    /**
     * @name【交易记录】
     * @desc【交易记录】
     * @uri【trading_detail】
     * @method【post】
     * @param【
     * passenger_id $ int $ 1 $ 用户乘客ID $ 1#
     * type $ string $ 1 $ type： 1-个人支付   2-单位支付  3-财政支付  4-所有支付记录 5-充值记录 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //交易记录 type： 1-个人支付   2-单位支付  3-财政支付  4-所有支付记录 5-充值记录
    public function trading_detail(){
        $p = input('param.');

        $where['passenger_id'] = $p['passenger_id'];
        //筛选支付方式
        $pay_type = $p['type'];

        $info = Db::name('order')->order('payment_time desc')->where($where)->whereIn('order_state',[10,11])
            ->field('payment_time,settlement_price AS money')->select();

        if($pay_type == 1 || $pay_type == 2 || $pay_type == 3 || $pay_type == 4){

            if($pay_type !== "4"){
                $where['pay_type'] = $pay_type;
            }

            //订单状态，1：待审批，2：已批准，3：已拒绝，4：待用车，5：已派车，6：接驾中，
            //7：已到达出发地，8：已到达目的地，9：待支付，10：待评价，11：已完成，12：已取消，13：已终止，14：无效
            $info = Db::name('order')->order('payment_time desc')->where($where)->whereIn('order_state',[10,11])
                ->field('payment_time,settlement_price AS money')->select();

        }elseif ($p['type'] == 5){

            $where['is_success'] = '1';
            $info = Db::name('recharge_record')->order('recharge_time desc')->where($where)->field('money,give_money,recharge_time')->select();

        }

        //return $info;
        return $this->rtn_data(1,$info);
    }

    /**
     * @name【设置提现密码】
     * @desc【设置提现密码】
     * @uri【pay_pwd】
     * @method【post】
     * @param【
     * user_id $ int $ 1 $ 用户ID $ 1#
     * new_pay_pwd $ string $ 1 $ 新密码 $ 1#
     * old_pay_pwd $ string $ 1 $ 旧密码 $ 0
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //设置提现密码
    public function pay_pwd(){
        $p = input('post.');
        $where['user_id'] = $p['user_id'];

        $user_info = Db::name('user')->where($where)->field('is_set_pwd,withdraw_pwd')->find();

        $is_set = $user_info['is_set_pwd'];
        $new_pay_pwd = md5($p['new_pay_pwd']);
        //9-未设置 1-设置
        if($is_set == '9'){

            $data['withdraw_pwd'] = $new_pay_pwd;
            $data['is_set_pwd'] = '1';
            $resl = Db::name('user')->where($where)->update($data);

        }else{

            if($user_info['withdraw_pwd'] == md5($p['old_pay_pwd'])){

                $resl = Db::name('user')->where($where)->setField('withdraw_pwd',$new_pay_pwd);

            }else{
                return $this->msg_rtn(0,'旧密码错误！');
            }
        }

        if($resl){
            return $this->msg_rtn(1);
        }else{
            return $this->msg_rtn(0,'系统异常，修改失败！');
        }
    }

    /**
     * @name【意见反馈】
     * @desc【意见反馈】
     * @uri【feedback】
     * @method【post】
     * @param【
     * user_id $ int $ 1 $ 用户ID $ 1#
     * content $ string $ 很棒 $ 反馈内容 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * data $ string $ $ 列表$[]
     * 】
     */
    //意见反馈
    public function feedback(){
        $p = input('param.');
        $data['user_id'] = $p['user_id'];
        $data['content'] = $p['content'];
        $data['feedback_time'] = date('Y-m-d H:i:s',time());

        $resl = Db::name('feedback')->insert($data);
        if($resl){
            return $this->msg_rtn(1);
        }else{
            return $this->msg_rtn(0,'系统异常！');
        }
    }


}